PHP. Уровень 1.
Основы создания сайтов
_____________________________________________________________________________________
http://igor-borisov.ru
Игорь Борисов
PHP. Уровень 1 Стр.1
Установка/настройка веб-сервера и PHP
Циклы
Пользовательские функции
Что внутри PHP?
Изучаем HTTP: формы
Темы курса
PHP. Уровень 1 Стр.2
PHP. Уровень 1
Установка и настройка PHP
и веб- сервера
Модуль 1
Модуль 1. Установка и настройка Стр.3
Как это работает?
Установка веб-сервера
Настройка веб-сервера
Установка PHP
Настройка PHP
Первый скрипт на PHP
Темы модуля
Модуль 1. Установка и настройка Стр.4
Как это работает
Модуль 1. Установка и настройка Стр.5
Модуль 1. Установка и настройка Стр.6
http://httpd.apache.org/
Сервер Apache
http://www.iis.net/
Сервер Microsoft IIS
http://www.denwer.ru/
Сборка Денвер
http://www.apachefriends.org/ru/xampp.html
Сборка XAMPP
http://www.wampserver.com
Сборка Wamp Server
http://www.easyphp.org/
Сборка EasyPHP
Какой сервер использовать?
Модуль 1. Установка и настройка Стр.7
http://open-server.ru
Сборка Open Server
Модуль 1. Установка и настройка Стр.8
Подготовка рабочего места
Подготовительная работа
Модуль 1. Установка и настройка Стр.9
Подготовка рабочего места
Откройте проводник Windows
Перейдите в директорию C:\Пользователи\Общие\OpenServer
\domains\
( Внимание! В некоторых ситуациях русскоязычному пути C:
\Пользователи\Общие\ соответствует англоязычный путь C:\Users
\Public\. Это одно и тоже. )
В этой директории создайте папку mysite.local
Запустите сервер. Для этого нажмите
[ Пуск -> Open Server ]
( На всякий случай, сама программа находится по пути C:
\Пользователи\Общие\OpenServer\Open Server.exe )
В правом нижнем углу (рядом с часами) кликните по иконке с
красным флажком
В открывшемся меню выберите первый пункт Запустить
Дождитесь пока цвет иконки с флажком изменится с желтого на
зеленый
Если запуск закончился неудачей - флажок опять стал красным, то
кликните по иконке, выберите последний пункт Выход и повторите
последние 4 пункта
Задание 1: Создание виртуального хоста и запуск сервера
Получите у преподавателя архив с файлами для работы на курсе
Скопируйте файл в созданную в предыдущем упражнении
директорию C:\Пользователи\Общие\OpenServer\domains
\mysite.local\
Распакуйте файл в текущую директорию
Запустите браузер и в адресной строке наберите: http://mysite.local/
Убедитесь, что сайт работает
Задание 2: Копирование необходимых файлов
Содержание подготовительной работы
Модуль 1. Установка и настройка Стр.10
Файл .htaccess
Модуль 1. Установка и настройка Стр.11
Создание файла .htaccess
Лабораторная работа 1.1
Модуль 1. Установка и настройка Стр.12
Создание файла .htaccess
Упражнение 1: Создание файла конфигурации директории
Откройте текстовый редактор
В текстовом редакторе создайте новый файл и напишите следующий
текст:
# Настройки сервера Apache
Options Indexes FollowSymLinks
DirectoryIndex index.php
Сохраните файл в папке C:\Пользователи\Общие\OpenServer
\domains\mysite.local\ под именем .htaccess
Запустите браузер и в адресной строке наберите: http://mysite.local/
Убедитесь, что нет ошибок и сайт работает
Содержание лабораторной работы 1.1
Модуль 1. Установка и настройка Стр.13
http://php.net
Где живёт PHP?
Модуль 1. Установка и настройка Стр.14
php5ts.dll
php_gd2.dll
php_mysqli.dll
php_mbstring.dll
ext
php.exe
php-cgi.exe
php5apache2_4.dll
php.ini
Что внутри PHP?
Модуль 1. Установка и настройка Стр.15
Первый скрипт. Вывод системной информации
Лабораторная работа 1.2
Модуль 1. Установка и настройка Стр.16
Первый скрипт. Вывод системной информации
Упражнение 1: Вывод системной информации
Откройте текстовый редактор
В текстовом редакторе создайте новый файл и напишите следующий
текст:
<?php
phpinfo();
?>
Сохраните файл в папке C:\Пользователи\Общие\OpenServer
\domains\mysite.local под именем info.php
Запустите браузер и в адресной строке наберите:
http://mysite.local/info.php
Вы должны увидеть специальную страницу с логотипом PHP
Содержание лабораторной работы 1.2
Модуль 1. Установка и настройка Стр.17
Как работает связка веб-сервера с PHP
Как удобно развернуть удобную среду на локальной машине
Получили представление о настройках веб-сервера
Получили представление о том, что из себя представляет PHP
Написали первый скрипт
Что мы изучили?
Модуль 1. Установка и настройка Стр.18
PHP. Уровень 1
Основы PHP
Модуль 2
Модуль 2. Основы PHP Стр.19
Синтаксис
Операторы
Переменные
Константы
Типы данных
Управляющие конструкции
Темы модуля
Модуль 2. Основы PHP Стр.20
<p>Это будет проигнорировано PHP и отображено браузером.</p>
<?php echo 'А это будет обработано.'; ?>
<p>Это тоже будет проигнорировано PHP и отображено
браузером.</p>
<?php
echo "Hello world";
// ... еще код
echo "Последнее выражение";
// Скрипт заканчивается тут без закрывающего тега PHP
Как PHP обрабатывает файл
Модуль 2. Основы PHP Стр.21
<?php
// ...код
?>
<?
// ...код
// short_open_tag (php.ini)
?>
<script language="php">
// ...код
</script>
<%
// ...код
// asp_tags (php.ini)
%>
PHP тэги
Модуль 2. Основы PHP Стр.22
<?php
echo "Это тест"; // Это однострочный комментарий в стиле
c++
/* Это многострочный комментарий
еще одна строка комментария */
echo "Это еще один тест";
echo "Последний тест"; # Это комментарий в стиле оболочки
Unix
?>
Комментарии
Модуль 2. Основы PHP Стр.23
<?php
инструкция 2;
инструкция 1;
?>
<?php инструкция 1; инструкция 2; ?>
<?php
трук
ция 1;
инс
?>
Особенности PHP
Модуль 2. Основы PHP Стр.24
<?php
echo "Привет мир!";
print "Привет мир!";
// Некоторые предпочитают передачу нескольких аргументов
echo 'Эта ', 'строка ', 'была ', 'создана ', 'несколькими
параметрами.';
// Вывод результата функции
echo strftime('%d-%B-%Y, %A');
Вывод данных
Модуль 2. Основы PHP Стр.25
Вывод данных
Лабораторная работа 2.1
Модуль 2. Основы PHP Стр.26
Вывод данных
Упражнение 1: Вывод текущей даты
Откройте в текстовом редакторе файл index.php
В области основного контента перед строкой <h3>Зачем мы ходим в
школу?</h3> напишите следующий текст:
<blockquote>
<?php echo strftime('Сегодня %d-%m-%Y'); ?>
</blockquote>
Сохраните файл index.php
Запустите браузер и в адресной строке наберите: http://mysite.local/
Убедитесь, что нет ошибок и результат выводится на страницу
Содержание лабораторной работы 2.1
Модуль 2. Основы PHP Стр.27
Переменные в PHP начинаются со знака доллара
($)
Имя переменной должно начинаться с буквы
или символа подчеркивания
Последующие символы в имени переменной
могут быть буквами, цифрами или символом
подчеркивания в любом количестве
Имя переменной чувствительно к регистру
Переменные
Модуль 2. Основы PHP Стр.28
// Присвоим переменной $x значение 10
$x = 10;
// Добавим к значению в переменной $x значение 15
$x = $x + 15;
// Выведем значение переменной $x
echo $x;
// Удалим переменную $x
unset($x);
// Вывод значения переменной
$name = "Вася";
<h1>Привет <?php echo $name ?></h1>
// Что и
<h1>Привет <?= $name ?></h1>
// Преобразование кодировок
echo iconv("windows-1251", "UTF-8", $name);
Использование переменных
Модуль 2. Основы PHP Стр.29
define("USER_NAME", "Вася");
echo USER_NAME; // выводит "Вася"
define("ONE_HUNDRED", 100);
define("ONE_HUNDRED_TEN", ONE_HUNDRED_TEN + 10);
const TWO_HUNDRED = 200; // PHP 5.3
const TWO_HUNDRED_TEN = TWO_HUNDRED + 10; // PHP 5.6
Константы
Модуль 2. Основы PHP Стр.30
Использование переменных
Лабораторная работа 2.2
Модуль 2. Основы PHP Стр.31
Использование переменных
Упражнение 1: Вывод текущей даты используя переменные
Откройте в текстовом редакторе файл index.php
В самом начале файла введите следующий текст:
<?php
// Установка локали и выбор значений даты
setlocale(LC_ALL, "russian");
$day = strftime('%d');
$mon = strftime('%B');
$year = strftime('%Y');
?>
Внутри тэгов <blockquote></blockquote> вместо текста:
echo strftime('Сегодня %d-%m-%Y');
введите слдующий текст:
echo 'Сегодня ', $day, ' число, ', $mon, ' месяц, ',
$year, ' год.';
Сохраните файл index.php и посмотрите результат в браузере
Внизу файла в блоке <!-- Нижняя часть страницы --> вместо 2015
выведете значение необходимой переменной
Сохраните файл index.php
Посмотрите результат в браузере
Содержание лабораторной работы 2.2
Модуль 2. Основы PHP Стр.32
E_PARSE
E_ERROR
E_WARNING
E_NOTICE
E_DEPRECATED
Уровни ошибок
display_errors = on
error_reporting = E_ALL & ~E_NOTICE
Директивы PHP.INI
// Включаем вывод всех ошибок
error_reporting(E_ALL);
// Отключаем вывод всех ошибок
error_reporting(0);
// Включаем определённые уровни ошибок
error_reporting(E_ERROR | E_WARNING);
error_reporting(E_ALL & ~E_DEPRECATED);
Ошибки - наше всё
Модуль 2. Основы PHP Стр.33
// Копирование переменных
$x = 10;
$y = $x;
$y = 20;
echo $x; // 10
echo $y; // 20
// Ссылки
$x = 10;
$y = &$x;
$y = 20;
echo $x; // 20
echo $y; // 20
// Переменные переменных
$x = "name";
$$x = "Вася";
$y = 20;
echo "Привет, ", $name; // Привет, Вася
Манипуляции с переменными
Модуль 2. Основы PHP Стр.34
// Целые числа (integer)
$int = 1234; // десятичное число
$int = -123; // отрицательное число
$int = 0123; // восьмеричное число (эквивалентно 83 в
десятичной системе)
$int = 0x1A; // шестнадцатеричное число (эквивалентно 26 в
десятичной системе)
$int = 0b11111111; // двоичное число (эквивалентно 255 в
десятичной системе)
// Числа с плавающей точкой (float, также известны как double
и real)
$float = 1.234;
$float = 1.2e3;
$float = 7E-10;
Типы данных: числа
Модуль 2. Основы PHP Стр.35
// Строка (string) - это набор символов, где символ - это то же самое, что и байт
echo 'это простая строка в апострофах';
echo 'это простая строка в двойных кавычках';
echo "Это будет развернуто: \n в две строки";
echo 'А это не будет развернуто: \n в две строки';
$name = "John"; $age = 25;
echo "Значения переменных $name и $age подставятся в строку";
echo 'А здесь значения переменных $name и $age не разворачиваются';
echo <<<HEREDOC
подставятся в строку, а сама строка развернётся
Значения переменных $name и $age
HEREDOC;
echo <<<'NOWDOC'
Эквивалент строки в одинарных кавычках.
Переменные $name и $age не развернутся.
И строки тоже.
NOWDOC;
// Экранирование переменных
$juice = "apple";
// Проблема
echo "He drank some $juice juice.";
echo "He drank some juice made of $juices.";
// Решение
echo "He drank some juice made of {$juice}s.";
echo "He drank some juice made of ${juice}s.";
// Доступ к символу в строке
$str = 'This is a test.';
// Получение первого символа в строке
$first = $str{0};
// Получение третьего символа в строке
$third = $str{2};
// Получение последнего символа в строке
$last = $str{ strlen($str)-1 };
// Изменение последнего символа в строке
$str{ strlen($str)-1 } = '!';
Типы данных: строки
Модуль 2. Основы PHP Стр.36
Модуль 2. Основы PHP Стр.37
Использование строк в двойных кавычках
Лабораторная работа 2.3
Модуль 2. Основы PHP Стр.38
Использование строк в двойных кавычках
Упражнение 1: Вывод текущей даты используя подстановку
значений переменных в двойных кавычках
Откройте в текстовом редакторе файл index.php
Переделайте строку:
echo 'Сегодня ', $day, ' число, ', $mon, ' месяц, ',
$year, ' год.';
в строку:
echo "Сегодня $day число, $mon месяц, $year год.";
Сохраните файл index.php
Посмотрите результат в браузере
Содержание лабораторной работы 2.3
Модуль 2. Основы PHP Стр.39
Пример
Название
Результат
-$a
Отрицание
Смена знака $a
$a + $b
Сложение
Сумма $a и $b
$a - $b
Вычитание
Разность $a и $b
$a * $b
Умножение
Произведение $a и $b
$a / $b
Деление
Частное от деления $a на $b
$a % $b
Деление по модулю
Целочисленный остаток от
деления $a на $b
Арифметические операторы
Модуль 2. Основы PHP Стр.40
$a = "Hello ";
$b = $a . "World!";
// $b теперь содержит строку "Hello World!"
$a = "Hello"; $b = "World!";
$c = $a . " " . $b;
// $c теперь содержит строку "Hello World!"
// Кстати, $d тоже содержит строку "Hello World!"
$d = "$a $b";
Конкатенация строк
Модуль 2. Основы PHP Стр.41
$x = true; // присвоить $x значение TRUE
$y = false; // присвоить $y значение TRUE
$z = null; // присвоить $z значение NULL
unset($x);
echo gettype($x); // NULL
Типы данных: boolean и NULL
Модуль 2. Основы PHP Стр.42
// Проверка типов
$str = "John";
$int = 10;
$bool = true;
echo gettype($str); // "string"
echo gettype($int); // "integer"
echo gettype($bool); // "boolean"
echo gettype($x); // "NULL"
echo is_string($str); // "1"
echo is_integer($int); // "1"
echo is_boolean($bool); // "1"
echo is_null($x); // ""
// Приведение типов
$int_from_str = (int)$str;
$str_from_int = (string)$int;
$bool_from_int = (bool)$int;
Манипуляции с типами
Модуль 2. Основы PHP Стр.43
$shop = true;
// Одна инструкция
if ($shop)
echo "Иду в магазин";
echo "Иду домой";
// Группа инструкций
if ($shop) {
echo "Иду в магазин";
echo "Покупаю хлеб";
}
echo "Иду домой";
Управление кодом: if
Модуль 2. Основы PHP Стр.44
Выражение
gettype()
empty()
isset()
boolean : if($x)
$x = "";
string
TRUE
TRUE
FALSE
$x = null;
NULL
TRUE
FALSE
FALSE
$x неопределена
NULL
TRUE
FALSE
FALSE
$x = false;
boolean
TRUE
TRUE
FALSE
$x = true;
boolean
FALSE
TRUE
TRUE
$x = 1;
integer
FALSE
TRUE
TRUE
$x = 42;
integer
FALSE
TRUE
TRUE
$x = 0;
integer
TRUE
TRUE
FALSE
$x = -1;
integer
FALSE
TRUE
TRUE
$x = "1";
string
FALSE
TRUE
TRUE
$x = "0";
string
TRUE
TRUE
FALSE
$x = "-1";
string
FALSE
TRUE
TRUE
$x = "php";
string
FALSE
TRUE
TRUE
$x = "true";
string
FALSE
TRUE
TRUE
$x = "false";
string
FALSE
TRUE
TRUE
Таблица сравнения типов
Модуль 2. Основы PHP Стр.45
Пример
Название
Результат
$a == $b
Равно
TRUE если $a равно $b после
преобразования типов.
$a === $b
Тождественно равно
TRUE если $a равно $b и имеет
тот же тип.
$a != $b
Не равно
TRUE если $a не равно $b
после преобразования типов.
$a !== $b
Тождественно не равно
TRUE если $a не равно $b или в
случае, если они разных типов
$a < $b
Меньше
TRUE если $a строго меньше
$b.
$a > $b
Больше
TRUE если $a строго больше
$b.
$a <= $b
Меньше или равно
TRUE если $a is меньше или
равно $b.
$a >= $b
Больше или равно
TRUE если $a больше или
равно $b.
Операторы сравнения
Модуль 2. Основы PHP Стр.46
Пример
Название
Результат
$a and $b
И
TRUE если и $a, и $b TRUE.
$a or $b
Или
TRUE если или $a, или $b TRUE.
$a xor $b
Исключающее или
TRUE если $a, или $b TRUE, но
не оба.
!$a
Отрицание
TRUE если $a не TRUE.
$a && $b
И
TRUE если и $a, и $b TRUE.
$a || $b
Или
TRUE если или $a, или $b TRUE.
Логические операторы
Модуль 2. Основы PHP Стр.47
$shop = "open";
// Одна инструкция
if ($shop == "open")
echo "Иду в магазин";
else
echo "Иду в киоск";
echo "Иду домой";
$shop = true; $money = true;
// Группа инструкций
if ($shop and $money) {
echo "Иду в магазин";
echo "Покупаю хлеб";
}else{
echo "Иду домой";
echo "Туплю в телевизор";
}
// Тернарный оператор
if ($shop == "open")
echo "Иду в магазин";
else
echo "Иду в киоск";
echo ($shop) ? "Иду в магазин" : "Иду в киоск";
Управление кодом: else
Модуль 2. Основы PHP Стр.48
if ($a > $b) {
echo "a больше, чем b";
} elseif ($a == $b) {
echo "a равно b";
} else {
echo "a меньше, чем b";
}
Управление кодом: elseif
Модуль 2. Основы PHP Стр.49
Использование управляющих конструкций if-elseif-else
Лабораторная работа 2.4
Модуль 2. Основы PHP Стр.50
Использование управляющих конструкций if-elseif-else
Упражнение 1: Вывод приветствия в зависимости от времени
суток
Откройте в текстовом редакторе файл index.php
В начале файла в php-блоке напишите:
/*
* Получаем текущий час в виде строки от 00 до 23
* и приводим строку к целому числу от 0 до 23
*/
$hour = (int) strftime('%H');
$welcome = ''; // Инициализируем переменную для
приветствия
от 0 до 6 - Доброй ночи
от 6 (включительно) до 12 - Доброе утро
от 12 (включительно) до 18 - Добрый день
от 18 (включительно) до 23 - Добрый вечер
Используя управляющую конструкцию if – elseif else присвойте
переменной $welcome значение, изходя из следующих условий
если число в переменной $hour попадает в диапазон:
Если число в переменной $hour не попадает ни в один из
вышеперечисленных диапазонов, то присвойте переменной
$welcome значение Доброй ночи
Между тэгами <h1></h1> вместо строки Добро пожаловать на наш
сайт! напишите: <?= $welcome ?>, Гость!
Сохраните файл index.php
Посмотрите результат в браузере
Содержание лабораторной работы 2.4
Модуль 2. Основы PHP Стр.51
// Абсолютно правильный код
$day = 2;
if ($day == 1)
echo "Понедельник";
elseif ($day == 2)
echo "Вторник";
elseif ($day == 3)
echo "Среда";
elseif ($day == 4)
echo "Четверг";
elseif ($day == 5)
echo "Пятница";
elseif ($day == 6)
echo "Суббота";
elseif ($day == 7)
echo "Воскресенье";
else
echo "Неизвестный день";
Управление кодом: switch
Модуль 2. Основы PHP Стр.52
$i = 1;
switch ($i) {
case 0:
echo "Результат: 0";
case 1:
echo "Результат: 1";
case 2:
echo "Результат: 2";
case 3:
echo "Результат: 3";
case 4:
echo "Результат: 4";
}
switch ($i) {
case 0:
echo "Результат: 0"; break;
case 1:
echo "Результат: 1"; break;
case 2:
echo "Результат: 2"; break;
case 3:
echo "Результат: 3"; break;
case 4:
echo "Результат: 4"; break;
}
$i = 20;
switch ($i) {
case 0:
echo "Результат: 0"; break;
case 1:
echo "Результат: 1"; break;
case 2:
echo "Результат: 2"; break;
case 3:
echo "Результат: 3"; break;
case 4:
echo "Результат: 4"; break;
default:
echo "Результат: много";
}
Модуль 2. Основы PHP Стр.53
Использование управляющей конструкции switch
Лабораторная работа 2.5
Модуль 2. Основы PHP Стр.54
Использование управляющей конструкции switch
Упражнение 1: Вывод значения директивы PHP post_max_size
Задача: вывести значение директивы php.ini post_max_size в байтах
Откройте в текстовом редакторе файл contact.php
В самом начале блока <!-- Область основного контента --> напишите:
<?php
?>
Задайте два вопроса, необходимые для решения задачи
Создайте переменную $size, которая будет содержать текущее
значение директивы post_max_size
Получите данные, о величине в которой представленно значение (т.е.
килобайты, мегабайты...)
Используя управляющую конструкцию switch вычислите результат и
сохраните его в переменную $size
После закрывающего тэга веб-формы </form> напишите:
<p>Максимальный размер отправляемых данных <?= $size ?>
байт.</p>
Сохраните файл contact.php
Посмотрите результат в браузере
Содержание лабораторной работы 2.5
Модуль 2. Основы PHP Стр.55
// Создание пустого массива
$arr = []; // До PHP 5.4 $arr = array();
// Создание массива c элементами
$arr = ["John", "root", "1234"]; // До PHP 5.4 $arr = array("John", "root", "1234");
// Обращение к элементу массива
echo $arr[1]; // root
// Добавление элементов в массив
$arr[] = 25;
$arr[] = true;
// Сколько элементов в массиве?
echo count($arr); // 5
// Выводим удобочитаемую информацию о переменной
print_r($arr);
// Выводим полную информацию о переменной
var_dump($arr);
// Ещё раз об индексации элементов массива
// Если массив не существует, он будет создан
$arr[] = 1; // Массив с одним элементом с ключом 0
$arr[5] = 2; // Добавили второй элемент с ключом 5
$arr[] = 3; // Добавили третий элемент с ключом 6
unset($arr); // Удалили массив
$arr = [12=>1, 5=>2]; // Создали массив из двух элементов с ключами 12 и 5
$arr[] = 3; // Добавили третий элемент с ключом 13
unset($arr[12]); // Удалили элемент массива с ключом 12
// Ассоциативный массив
"name"=>"John",
"login"=>"root",
"password"=>"1234",
"age"=>25,
true
$user = [
];
echo $user["name"]; // John
echo $user[0]; // 1
// Многомерный массив
"login" => "john",
"pass" => "1234"
$users[0] = [
];
"login" => "mike",
$users[1] = [
Типы данных: массив
Модуль 2. Основы PHP Стр.56
"login" => "mike",
"pass" => "5678"
];
echo $users[1]["login"]; // mike
Модуль 2. Основы PHP Стр.57
Использование многомерного массива
Лабораторная работа 2.6
Модуль 2. Основы PHP Стр.58
Использование многомерного массива
Упражнение 1: Создание динамического меню
Откройте в текстовом редакторе файл index.php
В начале блока <!-- Меню --> напишите:
<?php
$leftMenu = [
['link'=>'Домой', 'href'=>'index.php'],
['link'=>'О нас', 'href'=>'about.php'],
['link'=>'Контакты', 'href'=>'contact.php'],
['link'=>'Таблица умножения', 'href'=>'table.php'],
['link'=>'Калькулятор', 'href'=>'calc.php']
];
?>
В значениях атрибута href тэгов <a> вместо текущих значений выведите значения элементов массива
$leftMenu по следующему образцу:
<li><a href='<?= $leftMenu[0]['href']?>'><?= $leftMenu[0]['link']?></a></li>
<li><a href='<?= $leftMenu[1]['href']?>'><?= $leftMenu[1]['link']?></a></li>
...
Сохраните файл index.php
Посмотрите результат в браузере
Содержание лабораторной работы 2.6
Модуль 2. Основы PHP Стр.59
Познакомились с особенностями синтаксиса PHP
Уяснили понятие переменных и констант
Познакомились с типами данных: integer, float, string, boolean, null, array
Научились манипулировать типами данных с помощью различных операторов
Изучили несколько полезных встроенных функций
Научились управлять кодом с помощью конструкций: if-elseif-else и switch
Что мы изучили?
Модуль 2. Основы PHP Стр.60
PHP. Уровень 1
Циклы
Модуль 3
Модуль 3. Циклы Стр.61
Операторы инкремента и декремента
Цикл for
Цикл while
Цикл do-while
Управление циклами
Цикл foreach
Темы модуля
Модуль 3. Циклы Стр.62
// Постфиксный инкремент
$x = 1;
echo "Должно быть 1: " . $x++;
echo "Должно быть 2: " . $x;
// Что и
echo "Должно быть 1: $x"; $x += 1;
// Префиксный инкремент
$x = 1;
echo "Должно быть 2: " . ++$x;
echo "Должно быть 2: " . $x;
// Что и
$x += 1; echo "Должно быть 2: $x";
Операторы инкремента и декремента
Модуль 3. Циклы Стр.63
// Тело цикла
for (Часть А; Часть B; Часть С) {
}
echo $i;
for ($i = 1; $i <= 10; $i++) {
}
for ($i = 1; $i <= 10; print $i++);
Цикл for
Модуль 3. Циклы Стр.64
Использование цикла for
Лабораторная работа 3.1
Модуль 3. Циклы Стр.65
Использование цикла for
Упражнение 1: Вывод нечетных чисел из заданного диапазона
Откройте проводник Windows
Перейдите в папку С:\Users\Public\OpenServer\domains\mysite.local
\demo\
Создайте в текущей папке файл for.php
Откройте созданный файл for.php в текстовом редакторе
Используя цикл for выведите в столбик нечётные числа от 1 до 50
Сохраните файл for.php
Посмотрите результат в браузере
Содержание лабораторной работы 3.1
Модуль 3. Циклы Стр.66
// Тело цикла
while (Условие) {
}
$i = 1;
echo $i++;
while ($i <= 10) {
}
// Бесконечный цикл
while (true);
Цикл while
Модуль 3. Циклы Стр.67
Использование цикла while
Лабораторная работа 3.2
Модуль 3. Циклы Стр.68
Использование цикла while
Упражнение 1: Вывод строки посимвольно
Откройте проводник Windows
Перейдите в папку С:\Users\Public\OpenServer\domains\mysite.local
\demo\
Создайте в текущей папке файл while.php
Откройте созданный файл while.php в текстовом редакторе
Создайте переменную $var и присвойте ей строковое значение HELLO
Используя цикл while выведите значение переменной $var в столбик
так, чтобы на выходе в браузере получилось:
H
E
L
L
O
Сохраните файл while.php
Посмотрите результат в браузере
Содержание лабораторной работы 3.2
Модуль 3. Циклы Стр.69
$i = 100;
echo $i++;
do {
} while ($i <= 10);
Цикл do-while
Модуль 3. Циклы Стр.70
// Прерывание цикла
$i = 1;
echo $i++;
break;
if($i == 5)
while ($i <= 10) {
}
// Продолжение цикла
$i = 0;
$i++;
continue;
if($i == 5)
echo $i;
while ($i < 9) {
}
// Управление вложенными циклами
$i = 1; $j = 1;
echo $i++;
break 2;
if($i == 5)
while ($i <= 10) {
}
$j++;
while ($j <= 10) {
}
Управление циклами
Модуль 3. Циклы Стр.71
Создание динамической таблицы умножения
Лабораторная работа 3.3
Модуль 3. Циклы Стр.72
Создание динамической таблицы умножения
Упражнение 1: Создание HTML-таблицы
В текстовом редакторе откройте файл table.php
В начале файла создайте php-блоке, в котором создайте две
целочисленные переменные $cols и $rows
Присвойте созданным переменным произвольные значения в
диапазоне от 1 до 10
В блоке <!-- Таблица --> удалите весь html-код и напишите:
<?php
?>
Число столбцов должно быть равно значению переменной $cols
Число строк должно быть равно значению переменной $rows
Ячейки на пересечении столбцов и строк должны содержать
значения, являющиеся произведением порядковых номеров
столбца и строки
В текущем php-блоке используя циклы for отрисуйте таблицу
умножения в виде HTML-таблицы на следующих условиях:
Сохраните файл table.php
Посмотрите результат в браузере
Упражнение 2: Приводим таблицу к товарному виду
Отрисуйте значения в ячейках первой строки и первого столбца
полужирным шрифтом и выровняйте их по центру ячейки
Сделайте фоновый цвет ячеек первой строки и первого столбца
отличным от фонового цвета таблицы
Сохраните файл table.php
Посмотрите результат в браузере
Содержание лабораторной работы 3.3
Модуль 3. Циклы Стр.73
$arr = ['a'=>'one', 'b'=>'two', 'c'=>'three'];
echo "$val\n";
foreach ($arr as $val) {
}
/* one
two
three
*/
foreach ($arr as $key => $val) {
echo "$key : $val\n";
}
/* a : one
b : two
c : three
*/
$nums = [1, 2, 3, 4, 5];
$val *= 10;
foreach ($arr as $val) {
}
// Массив не изменился
foreach ($arr as &$val) {
$val *= 10;
}
// Теперь массив: [10, 20, 30, 40, 50]
Цикл foreach
Модуль 3. Циклы Стр.74
Создание динамического навигационного меню
Лабораторная работа 3.4
Модуль 3. Циклы Стр.75
Создание динамического навигационного меню
Упражнение 1: Вывод меню с использованием цикла
В текстовом редакторе откройте файл index.php
Перенесите в php-блок в начале файла код инициализации массива
из блока <!-- Меню -->, то есть:
$leftMenu = [
[ 'link'=>'Домой', 'href'=>'index.php' ];
...
добавив комментарий // Инициализация массива
В блоке <!-- Меню --> удалите всё html-содержимое (от <ul> до </ul>
включительно)
В php-блоке блока <!-- Меню --> отрисуйте вертикальное меню с
помощью цикла foreach, передав ему в качестве аргумента массив
$leftMenu.
Обратите внимание, что массив - многомерный.
Сохраните файл index.php
Посмотрите результат в браузере
Содержание лабораторной работы 3.4
Модуль 3. Циклы Стр.76
Познакомились с операторами инкремента и декремента
Научились использовать основные циклы for и while
Научились управлять циклами
Научились итерированию массивов
Что мы изучили?
Модуль 3. Циклы Стр.77
PHP. Уровень 1
Пользовательские функции
Модуль 4
Модуль 4. Функции Стр.78
Декларация функции
Вызов функции
Варианты объявления функции
Аргументы функции
Области видимости переменных
Статические переменные
Возвращаемые значения
Функция с переменным числом аргументов
Уточнение типа аргумента функции
Темы модуля
Модуль 4. Функции Стр.79
// Декларация функции
<?php
function sayHello()
{
echo "<h1>Hello, world!</h1>";
}
// Вызов функции
sayHello();
?>
// Функции, зависящие от условий
<?php
$makefoo = true;
/* Мы не можем вызвать функцию foo() в этом месте,
поскольку она еще не определена, но мы можем
обратиться к bar() */
bar();
if ($makefoo) {
function foo()
{
echo "Я не существую до тех пор, пока выполнение программы
меня не достигнет.\n";
}
}
/* Теперь мы благополучно можем вызывать foo(),
поскольку $makefoo была интерпретирована как true */
if ($makefoo) foo();
function bar()
{
echo "Я существую сразу с начала старта программы.\n";
}
?>
// Вложенные функции
<?php
function foo()
{
Декларация и вызов функции
Модуль 4. Функции Стр.80
{
function bar()
{
echo "Я не существую пока не будет вызвана foo().\n";
}
}
/* Мы пока не можем обратиться к bar(),
поскольку она еще не определена. */
foo();
/* Теперь мы можем вызвать функцию bar(),
обработка foo() сделала ее доступной. */
bar();
Модуль 4. Функции Стр.81
function sayHello($name)
{
echo "<h1>Hello, $name!</h1>";
}
// Передаём литерал
sayHello("John"); // Hello, John!
// Передаём значение переменной
$n = "Mike";
sayHello($n); // Hello, Mike!
// Обращение к функции через переменную
$func = "sayHello";
$func("Guest"); // Hello, Guest!
// Аргументы по-умолчанию
function sayHello($name="Guest")
{
echo "<h1>Hello, $name!</h1>";
}
sayHello("John"); // Hello, John!
sayHello(); // Hello, Guest!
Аргументы функции
Модуль 4. Функции Стр.82
Создание функции отрисовки таблицы умножения
Лабораторная работа 4.1
Модуль 4. Функции Стр.83
Создание функции отрисовки таблицы умножения
Упражнение 1: Отрисовка таблицы с помощью функции
В текстовом редакторе откройте файл table.php
В самом начале файла создайте php-блок
В текущем php-блоке создайте функцию drawTable()
Задайте для функции три аргумента: $cols, $rows, $color
Перенесите код ([Ctrl] + [X]), который отрисовывает таблицу
умножения из блока <!-- Таблица --> в тело функции
В блоке <!-- Таблица --> (там, где ранее отрисовывалась таблица)
отрисуйте таблицу умножения вызывая функцию drawTable() с
произвольными параметрами
Сохраните файл table.php
Посмотрите результат в браузере
Содержание лабораторной работы 4.1
Модуль 4. Функции Стр.84
function sayHello($name)
{
echo "<h1>Hello, $name!</h1>";
$name = "Вася";
}
sayHello("John");
$name = "Mike";
sayHello($name);
echo $name; // ???
// Обращение к глобальным переменным: вариант 1
function sayHello($name)
{
echo "<h1>Hello, $name!</h1>";
global $name;
$name = "Вася";
}
$name = "Mike";
sayHello($name);
echo $name; // Вася
// Обращение к глобальным переменным: вариант 2
function sayHello($name)
{
echo "<h1>Hello, $name!</h1>";
$GLOBALS["name"] = "Вася";
}
$name = "Mike";
sayHello($name);
echo $name; // Вася
// Обращение к глобальным переменным: вариант 3
function sayHello(&$name)
{
echo "<h1>Hello, $name!</h1>";
$name = "Вася";
}
$name = "Mike";
sayHello($name);
echo $name; // Вася
Области видимости переменных
Модуль 4. Функции Стр.85
sayHello("John"); // ERROR!!!
Модуль 4. Функции Стр.86
function test(){
$a = 0;
echo $a++;
}
test(); // 0
test(); // 0
test(); // 0
function test(){
static $a = 0;
echo $a++;
}
test(); // 0
test(); // 1
test(); // 2
Статические переменные
Модуль 4. Функции Стр.87
Создание функции отрисовки меню навигации по сайту
Лабораторная работа 4.2
Модуль 4. Функции Стр.88
Создание функции отрисовки меню навигации по сайту
Упражнение 1: Отрисовка меню с помощью функции
В текстовом редакторе откройте файл index.php
В начале файла в php-блоке создайте функцию drawMenu()
Задайте для функции первый аргумент $menu - в него будет
передаваться массив, содержащий структуру меню
Задайте для функции второй аргумент $vertical со значением по
умолчанию равным true. Данный параметр указывает, каким образом
будет отрисовано меню - вертикально или горизонтально
Перенесите код ([Ctrl] + [X]), который отрисовывает меню навигации
из блока <!-- Меню --> в тело функции
Измените код таким образом, чтобы меню отрисовывалось в
зависимости от входящего параметра $vertical - либо вертикально,
либо горизонтально
В блоке <!-- Меню --> (там, где ранее отрисовывалось меню)
отрисуйте меню навигации вызвав функцию drawMenu() с
необходимыми параметрами
Сохраните файл index.php
Посмотрите результат в браузере
Содержание лабораторной работы 4.2
Модуль 4. Функции Стр.89
// Этот код никогда не исполнится
echo "Мертвый код";
function square($num) {
return $num * $num;
}
echo square(4); // 16
$result = square(4);
// Возвращение массива
function numbers() {
return [1, 2, 3];
}
list($one, $two, $three) = numbers();
// Разыменовывание массива (PHP 5.4)
$two = numbers()[1];
Возвращаемые значения
Модуль 4. Функции Стр.90
foo(1, 2, 3);
$numargs = func_num_args();
echo "Всего аргументов: $numargs\n";
echo "Второй
function foo() {
$args = func_get_args();
foreach ($args as $key => $value) {
аргумент: " . func_get_arg(1) . "\n";
echo "Аргумент $key : $value\n";
}
}
Использование аргументов
переменной длины
Модуль 4. Функции Стр.91
function foo(array $var) {
// Ожидается только массив!
}
function mult($num) {
return $num * $num;
}
// PHP 5.4
function bar(callable $var, $arg) {
return $var($arg);
}
bar("mult", 4);
Уточнение типа
Модуль 4. Функции Стр.92
Научились создавать и вызывать функции
Функции могут принимать аргументы
Аргументы могут иметь значения по-умолчанию
Функция может не иметь объявленных аргументов, но мы имеем доступ к
переданным параметрам
Переменные внутри функции локальны, но мы имеем несколько вариантов
доступа к глобальным переменным
Функция может возвращать значение
Что мы изучили?
Модуль 4. Функции Стр.93
PHP. Уровень 1
Что внутри PHP?
Модуль 5
Модуль 5. Что внутри PHP Стр.94
Учимся читать документацию
Как читать описание функций
Обзор встроенных функций
Встроенные константы и псевдоконстанты
Суперглобальные переменные
Функции эмуляции SSI
Темы модуля
Модуль 5. Что внутри PHP Стр.95
http://php.net/download-docs.php
Установка и настройка
Справочник языка
Appendices
Справочник функций
http://php.net/manual/ru
http://php.net/docs.php
Документация PHP
Модуль 5. Что внутри PHP Стр.96
Функции для работы с переменными
Математические функции
Функции обработки строк
Функции для работы с массивами
Функции даты и времени
Обзор встроенных функций
Модуль 5. Что внутри PHP Стр.97
die и exit
echo и print
isset и unset
include и include_once
require и require_once
empty
eval
list
return
Языковые конструкции
Модуль 5. Что внутри PHP Стр.98
__LINE__
__FILE__
__FUNCTION__
__DIR__
Псевдоконсанты
E_ALL
M_PI
PHP_VERSION
PHP_OS
get_defined_constants(true)
Константы и псевдоконстанты
Модуль 5. Что внутри PHP Стр.99
$GLOBALS
$_ENV
$_SERVER
$_COOKIE
$_SESSION
$_FILES
$_GET
$_POST
$_REQUEST
Суперглобальные переменные
Модуль 5. Что внутри PHP Стр.100
// Файл vars.php
<?php
$color = 'green';
$fruit = 'apple';
?>
// Файл test.php
<?php
echo "A $color $fruit"; // A
include 'vars.php';
echo "A $color $fruit"; // A green apple
?>
include 'vars.php';
require 'vars.php';
include_once 'vars.php';
require_once 'vars.php';
Принцип подключения файлов
Модуль 5. Что внутри PHP Стр.101
Конструирование сайта
Лабораторная работа 5
Модуль 5. Что внутри PHP Стр.102
Конструирование сайта
Упражнение 1: Создание подключаемых файлов
В папке сайта создайте папку под названием inc
В текстовом редакторе создайте новый файл
Перенесите ([Ctrl] + [X]) в файл php-блок с функцией drawTable() из
файла table.php
Перенесите ([Ctrl] + [X]) в файл функцию drawMenu() из файла
index.php
Сохраните файл под именем lib.inc.php в папке inc и сохраните файлы
index.php и table.php
В текстовом редакторе создайте новый файл и создайте в нем php-
блок
Перенесите ([Ctrl] + [X]) в файл весь php-код из самого верхнего php-
блока файла index.php
Сохраните файл под именем data.inc.php в папке inc и сохраните
файл index.php
В текстовом редакторе создайте новый файл
Перенесите ([Ctrl] + [X]) в файл всё, что находится внутри блока <!--
Верхняя часть страницы --> из файла index.php
Сохраните файл под именем top.inc.php в папке inc и сохраните файл
index.php
В текстовом редакторе создайте новый файл
Перенесите ([Ctrl] + [X]) в файл всё, что находится внутри блока <!--
Навигация --> из файла index.php
Сохраните файл под именем menu.inc.php в папке inc и сохраните
файл index.php
В текстовом редакторе создайте новый файл
Перенесите ([Ctrl] + [X]) в файл всё, что находится внутри блока <!--
Нижняя часть страницы --> из файла index.php
Сохраните файл под именем bottom.inc.php в папке inc и сохраните
Содержание лабораторной работы 5
Модуль 5. Что внутри PHP Стр.103
Сохраните файл под именем bottom.inc.php в папке inc и сохраните
файл index.php
В текстовом редакторе создайте новый файл
Перенесите ([Ctrl] + [X]) в файл всё, что находится внутри блока <!--
Область основного контента --> из файла index.php
Сохраните файл под именем index.inc.php в папке inc и сохраните
файл index.php
Упражнение 2: Подключение файлов
В текстовом редакторе откройте (если не открыт) файл index.php
В самом верху файла подключите файлы lib.inc.php и data.inc.php из
папки inc
В блоке <!-- Верхняя часть страницы --> подключите файл top.inc.php
из папки inc
В блоке <!-- Навигация --> подключите файл menu.inc.php из папки
inc
В блоке <!-- Область основного контента --> подключите файл
index.inc.php из папки inc
В блоке <!-- Нижняя часть страницы --> подключите файл
bottom.inc.php из папки inc
Сохраните файл index.php
Посмотрите результат в браузере
Модуль 5. Что внутри PHP Стр.104
// Функция перехвата ошибок
function myError($errno, $errmsg, $errfile, $errline){
// Логгируем пользовательские ошибки
switch ($errno) {
case E_USER_ERROR:
case E_USER_WARNING:
error_log("$errmsg\n", 3, "error.log");
case E_USER_NOTICE:
}
}
// Установка перехватчика ошибок
set_error_handler("myError");
// Отлавливаем ошибки
trigger_error("Что-то случилось", E_USER_ERROR);
if ($error)
Обработка ошибок
Модуль 5. Что внутри PHP Стр.105
Познакомились с документацией по PHP
Научились читать прототипы функций
Совершили обзор основных групп встроенных функций
Познакомились с предопределёнными константами, псевдоконстантами и
суперглобальными переменными
Научились подключать файлы друг к другу
Узнали, как обрабатывать ошибки
Что мы изучили?
Модуль 5. Что внутри PHP Стр.106
PHP. Уровень 1
Работа с HTTP: формы
Модуль 6
Модуль 6. HTTP. Формы Стр.107
Заголовки запроса и ответа
Статусы сервера
HTTP 1/1
Переменные окружения сервера
Передача и приём данных
HTTP методы GET и POST
Работа с веб-формами:
Проверка передаваемых значений
Темы модуля
Модуль 6. HTTP. Формы Стр.108
GET /folder/index.html HTTP/1.1
Host: www.example.com
Accept: */*
Accept-Language: ru
Referer: http://google.com/?q=sometext
User-Agent: Mozilla 4.0 (compatible; MSIE 6.1,…)
HTTP/1.1 200 OK
Server: Microsoft IIS 7.5
Content-Type: text/html
Content-Length: 16345
Last-Modified: Sun, 03 Jul 2005 18:00:00 GMT
<html>
. . .
</html>
HTTP: HyperText Transfer Protocol
Модуль 6. HTTP. Формы Стр.109
<form action="…" method="…">
Логин:
<input name="login" type="text">
Пароль:
<input name="pwd" type="password">
<input type="submit">
</form>
GET /action.php?login=John&pwd=1234 HTTP/1.1
...
POST /action.php HTTP/1.1
...
Referer: http://example.com/page-with-form.html
Content-Type: application/x-www-form-urlencoded
Content-Length: 19
login=John&pwd=1234
Использование веб- форм
Модуль 6. HTTP. Формы Стр.110
// Приём параметров QueryString
echo $_GET['name'];
echo $_GET['age'];
// Приём параметров из тела запроса и их фильтрация
$name = trim( strip_tags( $_POST['name'] ) );
$age = (int) $_POST['age'];
echo "<p>Ваше имя $name</p>";
echo "<p>Вам $age лет</p>";
// Каким методом был осуществлён запрос?
echo "Данные переданы методом POST";
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
Приём и обработка данных
Модуль 6. HTTP. Формы Стр.111
Передача параметров на сервер
Лабораторная работа 6
Модуль 6. HTTP. Формы Стр.112
Передача параметров на сервер
Упражнение 1: Создание подключаемых файлов
В текстовом редакторе откройте файл about.php
Удалите всё, кроме содержимого блока <!-- Область основного
контента -->
Сохраните файл about.php
В текстовом редакторе откройте файл contact.php
Удалите всё, кроме содержимого блока <!-- Область основного
контента -->
Сохраните файл contact.php
В текстовом редакторе откройте файл calc.php
Удалите всё, кроме содержимого блока <!-- Область основного
контента -->
Сохраните файл calc.php
Упражнение 2: Изменение меню
В текстовом редакторе откройте файл data.inc.php
Необходимо изменить значения во всех элементах href массива
$leftMenu на index.php и добавить параметр (например id), который
будет передавать методом GET уникальные значения
Измените значения, которые в результате могут выглядеть так:
index.php
index.php?id=about
index.php?id=contact
index.php?id=table
index.php?id=calc
Сохраните файл data.inc.php
Упражнение 3: Приём данных от пользователя
В текстовом редакторе откройте файл index.php
В верхней части файла перед закрывающим тэгом ?> напишите:
// Инициализация заголовков страницы
Содержание лабораторной работы 6
Модуль 6. HTTP. Формы Стр.113
// Инициализация заголовков страницы
$title = 'Сайт нашей школы';
$header = "$welcome, Гость!";
$id = strtolower(strip_tags(trim($_GET['id'])));
switch($id){
case 'about':
$title = 'О сайте';
$header = 'О нашем сайте';
break;
case 'contact':
$title = 'Контакты';
$header = 'Обратная связь';
break;
case 'table':
$title = 'Таблица умножения';
$header = 'Таблица умножения';
break;
case 'calc':
$title = 'Он-лайн калькулятор';
$header = 'Калькулятор';
break;
}
Между тэгами <title></title> напишите:
<?php echo $title?>
В блоке <!-- Заголовок --> между тэгами <h1></h1> напишите:
<?php echo $header?>
В блоке <!-- Область основного контента --> удалите всё содержимое
и напишите:
<?php
switch($id){
case 'about':
include 'about.php';
break;
case 'contact':
include 'contact.php';
break;
case 'table':
include 'table.php';
break;
case 'calc':
include 'calc.php';
break;
default:
include 'index.inc.php';
}
?>
Сохраните файл index.php
Модуль 6. HTTP. Формы Стр.114
Сохраните файл index.php
Посмотрите результат в браузере. Обратите внимание, что файл
table.php пока не готов к использованию
Упражнение 4: Допиливаем таблицу умножения
В текстовом редакторе откройте файл table.php
Удалите всё, кроме блока <!-- Область основного контента -->
В верхней части файла напишите:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$cols = abs((int) $_POST['cols']);
$rows = abs((int) $_POST['rows']);
$color = trim(strip_tags($_POST['color']));
}
$cols = ($cols) ? $cols : 10;
$rows = ($rows) ? $rows : 10;
$color = ($color) ? $color : 'yellow';
?>
В блоке <!-- Таблица --> исправьте вызов функции на:
drawTable($cols, $rows, $color);
В значении атрибута action тэга <form> напишите:
<?= $_SERVER['REQUEST_URI']?>
Добавьте в тэг <form> атрибут method со значением POST
Сделайте так, чтобы введенные значения оставались в текстовых
полях формы после перезагрузки страницы
Сохраните файл table.php
Посмотрите результат в браузере
Модуль 6. HTTP. Формы Стр.115
Узнали, как взаимодействуют браузер и сервер
Получили понимание HTTP-заголовков запроса и ответа
Научились отправлять и принимать данные из веб-формы
Поняли, что входящие данные необходимо фильтровать
Что мы изучили?
Модуль 6. HTTP. Формы Стр.116
Создание простого калькулятора
Итоговая работа
Модуль 6. HTTP. Формы Стр.117
Создание простого калькулятора
Уяснение задачи
В текстовом редакторе откройте файл calc.php
Калькулятор принимает два числа и производит над ними
математические действия
Калькулятор оперирует только целыми числами (тип integer)
Калькулятор понимает 4 действия: сложение, вычитание,
умножение и деление
Математические действия зависят от передаваемого оператора. При
том что:
Результат выводится в виде строки. Например, при переданных
данных 2, 3 и +, можно вывести: Результат 2 + 3 = 5
Упражнение 1: Прием данных из формы
Убедитесь, что передача данных передаваемых веб-формой
осуществлена методом POST
Примите данные переданные веб-формой
Убедитесь, что все данные пришли со значениями
Отфильтруйте пришедшие данные
Упражнение 2: Получение необходимого результата
Используя управляющую конструкцию switch, производите
различные математические действия в зависимости от оператора
В случае деления, проверьте делитель на равенство с нулем (на ноль
делить нельзя)
Помните, что калькулятор выполняет только 4 действия, а
пользователь может передать неверный оператор - это надо
отследить и уведомить пользователя об ошибке
Упражнение 3: Вывод результата и проверка работы
Выведите результат вычислений перед html-кодом отрисовки веб-
формы
Содержание итоговой работы
Модуль 6. HTTP. Формы Стр.118
формы
Сохраните файл calc.php
Запустите калькулятор в браузере и проверьте его работу
Модуль 6. HTTP. Формы Стр.119
Документация PHP
Что почитать?
Резюме Стр.120
PHP. Уровень 2. Разработка web-сайтов и взаимодействие с MySQL
Что дальше?
Резюме Стр.121